package top.malaoshi.jdbc;

/**
 * 方便生成sql语句
 */
public class SQLBuilder {
    /**
     * 构建insert sql，格式：insert into student(id,name,age) values (?,?,?)
     * @param table 表名
     * @param columns 列名
     * @return
     */
    public static String insert(String table, String ... columns){
        StringBuilder sql = new StringBuilder("insert into ");
        sql.append(table);
        sql.append(" ( ");
        //emp (empno,ename) values ( #{empno} , #{ename} )";

        for(String column : columns){
            sql.append(column);
            sql.append(",");
        }
        int length = sql.length();
        sql.delete(length-1, length );
        sql.append(" ) values ( ");

        for(String column : columns){
            sql.append(" ? ");
            sql.append(",");
        }
        length = sql.length();
        sql.delete(length-1, length );
        sql.append(" )");

        return sql.toString();
    }

    /**
     * 构建insert sql，格式：insert into student(id,name,age) values (#{id},#{name},#{age})
     * @param table 表名
     * @param columns 列名
     * @param tags 如：#{tag} ，其中，tag必须是 bean 的成员变量名
     * @return
     */
    public static String insertTag(String table, String[] columns, String[] tags){
        StringBuilder sql = new StringBuilder("insert into ");
        sql.append(table);
        sql.append(" ( ");

        for(String item : columns){
            sql.append(item);
            sql.append(",");
        }
        int length = sql.length();
        sql.delete(length-1, length );
        sql.append(" ) values ( ");

        // 拼装 values 部分，是 #{列名}
        for(String item : tags){
            sql.append(item);
            sql.append(",");
        }
        length = sql.length();
        sql.delete(length-1, length );
        sql.append(" )");

        return sql.toString();
    }

    /**
     * 在sql后面拼装 in 部分
     * @param sql 传入sql，如： select * from emp where empno in ，最后必须是 in
     * @param paramNum in语句中 ? 的数量
     * @return
     */
    public static String in(String sql,int paramNum){
        StringBuilder sqlBuilder = new StringBuilder(sql);
        sqlBuilder.append(" ( ");
        for(int i = 0;i<paramNum;i++){
            sqlBuilder.append("?");
            sqlBuilder.append(",");
        }
        int length = sqlBuilder.length();
        sqlBuilder.delete(length-1, length );
        sqlBuilder.append(" ) ");

        return sqlBuilder.toString();
    }
}
